package co.fitstart.weapp.api.service;

import java.util.List;
import java.util.Map;

import co.fitstart.entity.course.round.CourseRound;
import co.fitstart.entity.course.round.CourseRoundFeedback;
import co.fitstart.entity.course.schedule.CourseSchedule;
import co.fitstart.entity.user.Student;

/**
 * 
 * @author haiyan_xiao
 *
 */
public interface CourseRoundService {

    /**
     * 列出可用课程（筹备中、上课中）
     * @param student
     * @return
     */
    public List<Map<String, Object>> listAvailable(Student student);

    /**
     * 列出不可用课程（非筹备中、上课中）
     * @param student
     * @return
     */
    public List<CourseRound> listUnavailable(Student student);

    /**
     * 
     * @param student
     * @return
     */
    public List<CourseRound> listOnline(Student student);

    /**
     * 
     * @param courseRoundId
     * @return
     */
    public CourseRound load(Long courseRoundId);

    /**
     * 
     * @param courseRound
     * @return
     */
    public boolean needTargetData(CourseRound courseRound);

    /**
     * 
     * @param courseRound
     * @return
     */
    public List<CourseSchedule> listCourseCourseWare(CourseRound courseRound);
    

    /**
     * 
     * @param couponIds
     * @param finish
     * @return
     */
    public List<CourseRound> list(List<String> couponIds, boolean finish);

    /**
     * 
     * @param courseRound
     * @return
     */
    public List<CourseSchedule> listCourseSchedule(CourseRound courseRound);

    /**
     * 
     * @param student
     * @return
     */
    public int count(Student student);

    /**
     * 
     * @param student
     * @param courseRound
     */
    public void validate(Student student, CourseRound courseRound);

    /**
     * 
     * @param student
     * @param courseSchedule
     */
    public void validate(Student student, CourseSchedule courseSchedule);

    /**
     * 是否可预约，预约换课不算
     * @param courseRound
     * @return
     */
    public boolean couldAppoint(CourseRound courseRound);

    /**
     * 课程反馈
     * @param courseRound
     * @param feedback
     */
    public void feedback(CourseRound courseRound, CourseRoundFeedback feedback);

    /**
     * 
     * @param courseRound
     * @return
     */
    public boolean isInbodyNeeded(CourseRound courseRound);

    /**
     * 
     * @param courseRound
     * @return
     */
    public boolean isBwhNeeded(CourseRound courseRound);

    /**
     * 列出学员所有1V1及年卡课程
     * @param student
     * @return
     */
    public List<CourseRound> list(Student student);
}
